These should all get escaped:
Backslash: \
Backtick: `
Asterisk: *
Underscore: _
Left brace: {
Right brace: }
Left bracket: [
Right bracket: ]
Left paren: (
Right paren: )
Greater-than: >
Hash: #
Period: .
Bang: !
Plus: \+
Minus: \-
These should not, because they occur within a code block:
Backslash: \\
Backtick: \`
Asterisk: \*
Underscore: \_
Left brace: \{
Right brace: \}
Left bracket: \[
Right bracket: \]
Left paren: \(
Right paren: \)
Greater-than: \>
Hash: \#
Period: \.
Bang: \!
Plus: \+
Minus: \-
Nor should these, which occur in code spans:
Backslash: `\`
Backtick: `
Asterisk: `*`
Underscore: `_`
Left brace: `{`
Right brace: `}`
Left bracket: `[`
Right bracket: `]`
Left paren: `(`
Right paren: `)`
Greater-than: `>`
Hash: `#`
Period: `.`
Bang: `!`
Plus: \+
Minus: \-